define(["jquery"],function(jq){
            /*
           * 注册插件对象和业务对象之间的关系.
           */
          jq.register = (function() {
            /**
             * 注册工具.
             * <p>
             * 用于将插件对象和插件业务对象关联起来。 关联方式采用jQuery.data()方法.
             * </p>
             * 
             * @constructor .
             */
            function Register() {
            }

            Register.UUID = '62C88DBEF29B8DB7A65298AB46E3929E';

            /**
             * 查找target参数对象关联的func插件的业务对象.
             * 
             * @param func
             *          插件业务类型.
             *          <p>
             *          需要func.UUID属性作为查找依据.
             *          </p>
             * @param target
             *          需要查找管理的对象.
             *          <p>
             *          此对象一般为DOM节点或其他经过jQuery封装的对象.
             *          </p>
             * @return 如果无法找到返回"undefined"或"null".
             */
            Register.find = function(func, target) {
              var res = undefined;
              res = jq.data(target, func.UUID);
              return res;
            };
            /**
             * 设置两个对象之间的关联.
             * 
             * @param master
             *          主对象.
             * @param key
             *          关联关键字.
             * @param target
             *          关联目标.
             * @returns 如果为设置关联,返回master;如果为获取关联,返回之前关联的target.
             */
            Register.ref = function(master, key, target) {
              if (target) {
                jq.data(master, key, target);
                return master;
              } else {
                return jq.data(master, key);
              }
            };
            /**
             * 获得与target相关的业务对象.
             * <p>
             * 如果没有关联的业务对象则实例化新的业务对象。
             * </p>
             * 
             * @param func
             *          业务对象的构造函数.
             * @param target
             *          目标元素.
             * @returns 与目标元素相关的业务对象.
             */
            var p=null;
            Register.findOrNew = function(target, func) {
              var res = undefined;
              if (target instanceof jQuery) {
                target = target[0];
              }
              res = Register.find(func, target);
              
              if (!res) {
                res = new func(arguments[2]?arguments[2]:{}, target);
                p=res;
                jq.data(res, func.UUID, target);
                jq.data(target, func.UUID, res);
                //console.log("settings:"+func.prototype.settings)
              }
              return res;
            }

            var REGISTER = Register();

            var interfaceFunction = function(options) {
              return jq.register.METHODS[options].apply(REGISTER, shift(arguments));
            };
            interfaceFunction.METHODS = {
              find : function() {
                return Register.findOrNew.apply(REGISTER, arguments);
              },
              findTarget : function(object, func) {
                return jq.data(object, func.UUID);
              },
              ref : function(master, key, target) {
                return Register.ref.call(REGISTER, master, key, target);
              }
            };
            return interfaceFunction;
          })();
});